QVF 奴の名は

問題名

奴の名は

点数: 150点
難易度: 普通

概要

会社のアカウント管理にLDAPを利用しようとしています。
同僚が「LDAPサーバーを構築したのにsshできないよ〜」と言っているので、助けてあげましょう。

前提条件

  • Ubuntu 22.04の環境で、LDAPサーバーが構築されている。
  • aliceというユーザーがLDAPに存在するが、sshやsuができない。
  • LDAPに保存してあるaliceユーザー情報を編集する必要はない。
  • LDAPサーバーとLDAPを利用するクライアントは通常別々のマシンだが、今回は簡易化のために一緒にしました。この構成に特に意味はない。
  • 注意事項
  • LDAP(OpenLDAP)以外を用いて問題を解決してはいけない。(ローカルアカウントを作る、など)
  • 既存のLDAPサーバーを修正すること。つまりDockerや仮想マシンで別途新しいOpenLDAPデーモンを実行したり外部のLDAPを利用してはいけない。
  • ただトラブルシューティングの作業内容を解答するだけではなく、何が原因だったのかを解答に含めること。「xxの設定をコピペしてきたら治った」「xxを実行したら治った」だけでは減点とする。

初期状態

ssh alice@localhostを実行してもsshができない

終了状態

ssh alice@localhostを実行するとログインができてシェルが出てくる

解説

想定していた解法

slapdの設定と、LDAPクライアントの設定(/etc/ldap.conf/etc/pam.d/)には問題がない。しかし、LDAPに存在するユーザー alice を探そうとしても、getentコマンドでは結果が返ってこない。

getent passwd

ここで、getentなどユーザー取得をするプログラムと、LDAPサーバー間の通信に問題があると予想できる。
getentが利用するpasswdのデータ取得元は /etc/nsswitch.conf から確認できるため、表示してみるとpasswdの行が以下のようになっている。

passwd:         files systemd

これではLDAPを参照しないため、以下のように変更する。

passwd:         files systemd ldap

採点基準

  • /etc/nsswitch.conf にLDAPを追記する(100%)

問題環境構築セット

https://github.com/onokatio/ictsc-2022-qvf-ansible